# CLASS 
class PipeIncorrect:
    def __init__(self):
        self.data = []

    def is_empty(self):
        return len(self.data) == 0

    def retrieve_data(self):
        return self.data.pop(0)

    def append_data(self, data):
        self.data.append(data)


class FilterIncorrect:
    def __init__(self, pipes_in, pipes_out, const_function):
        self.pipes_in = pipes_in
        self.pipes_out = pipes_out
        self.filter_function = const_function

    def process_data(self):
        for pipe_in in self.pipes_in:
            while not pipe_in.is_empty():
                data = pipe_in.retrieve_data()
                self.add_data_to_pipes_out(self.filter_function(data))

    def add_data_to_pipes_out(self, data):
        for pipe_out in self.pipes_out:
            pipe_out.append_data(data)

def shift_alphabet_by_n(pismeno, n):
    char_code_p = ord(pismeno)
    char_code_shifted = (char_code_p + n) 
    return chr(char_code_shifted)




# IMPLEMENTATION 
dump_pipe3 = PipeIncorrect()
dump_filter3 = FilterIncorrect([dump_pipe3], [], lambda data: print(data))

shift_alphabet_pipe = PipeIncorrect()
shift_alphabet_filter = FilterIncorrect([shift_alphabet_pipe], [dump_pipe3], lambda data: "".join([shift_alphabet_by_n(pismeno, 1) for pismeno in data]))

dump_pipe2 = PipeIncorrect()
dump_filter2 = FilterIncorrect([dump_pipe2], [], lambda data: print(data))

remove_spaces_pipe = PipeIncorrect()
remove_spaces_filter = FilterIncorrect([remove_spaces_pipe], [dump_pipe2,shift_alphabet_pipe], lambda data: data.replace(" ", ""))

dump_pipe = PipeIncorrect()
dump_filter = FilterIncorrect([dump_pipe], [], lambda data: print(data))

input_pipe = PipeIncorrect()
filter_upper = FilterIncorrect([input_pipe], [dump_pipe,remove_spaces_pipe], lambda data: data.upper())

if __name__ == '__main__':
    while True:
        data = input("Enter data: ")
        input_pipe.append_data(data)
        filter_upper.process_data()
        dump_filter.process_data()
        remove_spaces_filter.process_data()
        dump_filter2.process_data()
        shift_alphabet_filter.process_data()
        dump_filter3.process_data()
